
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Redis怎么保证高可用性 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>Redis怎么保证高可用性 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">在分布式系统设计中，什么是高可用（High Availability）？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">高可用HA（High Availability）是分布式系统架构设计中必须考虑的因素之一，它通常是指通过精心设计来减少系统不能提供服务的时间。例如，达到99.99%的可用性意味着系统的年停机时间不超过52.56分钟。</div>
          </div>
          <div class="card-source">来源: 什么是高可用</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">Redis主从模式如何实现数据备份和高可用？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Redis通过主从复制实现数据的备份和高可用。一个主节点可以有多个从节点，主节点将写操作同步给从节点以保证数据一致性。当主节点发生故障时，可以将一个从节点提升为新的主节点，从而确保系统的可用性。</div>
          </div>
          <div class="card-source">来源: 主从模式</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">请描述Redis主从模式下“全量同步”的主要步骤。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1) 从服务器连接主服务器，发送SYNC命令；<br>2) 主服务器收到SYNC后，执行BGSAVE生成RDB文件，并用缓冲区记录后续写命令；<br>3) BGSAVE执行完毕后，主服务器向所有从服务器发送快照文件；<br>4) 从服务器收到快照后，丢弃所有旧数据并载入新快照；<br>5) 主服务器发送完快照后，开始向从服务器发送缓冲区中的写命令；<br>6) 从服务器完成快照载入，开始接收并执行来自主服务器缓冲区的写命令。</div>
          </div>
          <div class="card-source">来源: 主从模式</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">Redis哨兵（Sentinel）模式的核心作用是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">哨兵模式是一个用于监控和管理Redis集群的系统。它的核心作用是自动检测主节点的故障，并在主节点不可用时，自动进行故障转移，从从节点中选举出一个新的主节点，以保证系统的连续性。</div>
          </div>
          <div class="card-source">来源: 哨兵模式</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">在哨兵模式下，当主节点宕机后，选举新主节点的判断标准是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">哨兵的leader会根据以下顺序从从节点中选举新的主节点：<br>1) 首先选举数据偏移量最大的从节点；<br>2) 如果偏移量相同，则选举优先级（slave-priority）最高的从节点；<br>3) 如果以上条件都相同，则选择runid最小的从节点作为主节点。</div>
          </div>
          <div class="card-source">来源: 哨兵模式</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">与主从或哨兵模式相比，Redis Cluster模式在架构上有哪些显著特点？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Redis Cluster模式是一种分布式部署模式，其显著特点包括：<br>1) 不依赖中心节点，每个节点都是平等的。<br>2) 通过哈希槽（hash slot）实现数据的自动分片和分布式存储。<br>3) 可以通过增加节点来实现横向扩展，提高系统的吞吐量和处理能力。</div>
          </div>
          <div class="card-source">来源: Redis Cluster模式</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">Redis Cluster模式是如何对数据进行分片存储的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Redis Cluster模式使用哈希槽（hash slot）来分片数据。它将所有数据划分为16384个哈希槽，每个集群中的节点负责处理其中的一部分槽位，从而实现数据的分布式存储。</div>
          </div>
          <div class="card-source">来源: Redis Cluster模式</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在Redis Cluster中，节点之间使用什么协议进行通信以维护集群信息？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">在Redis Cluster中，节点之间通过gossip协议进行通信，该协议用于维护和交换集群的拓扑信息，例如哪些节点存活、它们负责哪些哈希槽等。</div>
          </div>
          <div class="card-source">来源: Redis Cluster模式</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">当Redis Cluster中的主节点发生故障时，系统如何保证可用性？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">当主节点故障时，Redis Cluster会自动进行故障转移。系统会从该主节点下属的从节点中选举一个升级为新的主节点，接管原来主节点负责的哈希槽，从而确保数据的可用性和服务的连续性。</div>
          </div>
          <div class="card-source">来源: Redis Cluster模式</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
